同时按住多个按键的识别;矩阵键盘扫描原理详解

您所在的位置:网站首页 单片机 矩阵按键 同时按住多个按键的识别;矩阵键盘扫描原理详解

同时按住多个按键的识别;矩阵键盘扫描原理详解

2024-07-15 21:09:05| 来源: 网络整理| 查看: 265

矩阵键盘扫描原理详解

根据原理图 键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。

一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。

现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?

当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。

首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;

其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。

/*****************************************************************************/

PS:同时按住S5,S6也是可以识别的。

首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;

其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1001(0x09),如果我们的键盘布局已经确定,那么0x09就代表S5,S6的值了。

/**************************************************************************/

/*       功能:矩阵键盘扫面,按键显示键值程序      作者:siriuszxn                                   */ #include "reg51.h"                                                                                                                 #define KEYPORT = P1                                                                                                    unsigned char i;                                                                                                                                          unsigned char Keynum;                                                                                                         unsigned char Line;                                       //行                                                                  unsigned char Mask;                                                                                                          unsigned char Col;                                        //列                                                                       unsigned char ScanCode;                                                                                               unsigned char code psegs_table[] =                                                                                            {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};                                                                //共阳极数码管0-F                                                                                                                                             void delay_ms(unsigned int t)                      //ms延时程序                                                                       {                                                                                                                                            unsigned char i;                                                                                                                       unsigned int x;                                                                                                                        x=t;                                                                                                                                    while(x--)                                                                                                                              {                                                                                                                                                        for(i=0;i 0)                                                                                                                                                        {                    //根据行列计算键值                                                                                                                                                                          Keynum = (Line - 1) * 4 + Col;                                                                                   //通过P0口接数码管显示                                                                                                                           P0 = psegs_table[Keynum-1];                                                                                                           while(1)                                                                                                            {                                                                                                     ScanCode = P1 & 0xf0;                                                                                                     if(ScanCode == 0xf0)                                                                                    {                                                                                                                                                                       break;                                                                         }                                                                                                                                        }                                                                                                 Mask


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭